package app.caihan.wanandroid.model.api

import app.caihan.wanandroid.model.bean.*
import retrofit2.http.*

/**
 *
 *
 * @author Seven-C
 * @date 2020/7/27
 */
interface WanService {

    companion object {
        const val BASE_URL = "https://www.wanandroid.com"
    }

    /**
     * 玩安卓轮播图
     */
    @GET("banner/json")
    suspend fun getBanners(): WanApiResult<ArrayList<BannerBean>>

    /**
     *首页文章列表
     */
    @GET("/article/list/{page}/json")
    suspend fun getArticleList(@Path("page") page: Int = 0): WanApiResult<PageList>


    /**
     * 获取公众号列表
     */
    @GET("/wxarticle/chapters/json")
    suspend fun getWxArticleChapters(): WanApiResult<ArrayList<Chapters>>

    /**
     * 查看某个公众号历史数据
     * @param id 公众号 ID
     */
    @GET("/wxarticle/list/{id}/{page}/json")
    suspend fun getWxArticleList(
        @Path("id") id: Int,
        @Path("page") page: Int = 1
    ): WanApiResult<PageList>


    /**
     * 按时间分页展示所有项目
     */
    @GET("/article/listproject/{page}/json")
    suspend fun getProjectList(@Path("page") page: Int = 0): WanApiResult<PageList>


    /**
     * 常用网站
     */
    @GET("/friend/json")
    suspend fun getFriendList(): WanApiResult<ArrayList<FriendBean>>

    /**
     * 目前搜索最多的关键词
     */
    @GET("/hotkey/json")
    suspend fun getHotkeyList(): WanApiResult<ArrayList<HotkeyBean>>

    /**
     * 置顶文章
     */
    @GET("/article/top/json")
    suspend fun getArticleTopList(): WanApiResult<PageList>

    /**
     * 体系数据
     */
    @GET("/tree/json")
    suspend fun getTreeList(): WanApiResult<ArrayList<Chapters>>

    /**
     * 体系下的文章
     * @param cid 分类的id
     */
    @GET("/article/list/{page}/json")
    suspend fun getTreeArticleList(
        @Path("page") page: Int = 0,
        @Query("cid") cid: Int
    ): WanApiResult<PageList>


    /**
     * 按照作者昵称搜索文章
     * @param author 作者昵称，不支持模糊匹配
     */
    @GET("/article/list/{page}/json")
    suspend fun searchArticleOfAuthor(
        @Path("page") page: Int = 0,
        @Query("author") author: String
    ): WanApiResult<PageList>


    /**
     * 导航数据
     */
    @GET("/navi/json")
    suspend fun getNavigationList(): WanApiResult<ArrayList<NavigationBean>>

    /**
     * 项目分类
     */
    @GET("/project/tree/json")
    suspend fun getProjectTreeList(): WanApiResult<ArrayList<Chapters>>

    /**
     * 分类下项目列表数据
     * @param cid 分类的id
     */
    @GET("/project/list/{page}/json")
    suspend fun getProjectArticleOfCid(
        @Path("page") page: Int = 1,
        @Query("cid") author: String
    ): WanApiResult<PageList>

    /**
     * 广场列表数据
     */
    @GET("user_article/list/{page}/json")
    suspend fun getUserArticleList(
        @Path("page") page: Int = 0
    ): WanApiResult<PageList>

    /**
     * 每日一问列表数据
     */
    @GET("wenda/list/{page}/json")
    suspend fun getAskList(
        @Path("page") page: Int = 1
    ): WanApiResult<PageList>


    /**
     * 登录
     * 登录后会在cookie中返回账号密码，只要在客户端做cookie持久化存储即可自动登录验证
     */
    @FormUrlEncoded
    @POST("/user/login")
    suspend fun login(
        @Field("username") userName: String,
        @Field("password") passWord: String
    ): WanApiResult<User>

    /**
     * 注册
     */
    @FormUrlEncoded
    @POST("/user/register")
    suspend fun register(
        @Field("username") userName: String,
        @Field("password") passWord: String,
        @Field("repassword") repassword: String
    ): WanApiResult<Any>


    /**
     * 退出
     */
    @GET("/user/logout/json")
    suspend fun logout(): WanApiResult<Any>

    /**
     * 收藏文章列表
     */
    @GET("/lg/collect/list/{page}/json")
    suspend fun getCollectList(@Path("page") page: Int = 0): WanApiResult<PageList>

    /**
     * 收藏文章
     * @param id 文章id
     */
    @POST("/lg/collect/{id}/json")
    suspend fun collect(
        @Path("id") id: Int
    ): WanApiResult<Any>

    /**
     * 收藏站外文章
     * @param title 标题
     * @param author 作者
     * @param link 链接
     */
    @POST("/lg/collect/add/json")
    suspend fun collectAdd(
        @Path("title") title: String,
        @Path("author") author: String,
        @Path("link") link: String
    ): WanApiResult<Any>

    /**
     * 取消收藏文章
     * @param id 文章id
     */
    @POST("/lg/uncollect_originId/{id}/json")
    suspend fun uncollectOriginId(@Path("id") id: Int): WanApiResult<Any>

    /**
     * 在我的收藏页面中取消收藏
     * @param id 文章id
     */
    @POST("/lg/uncollect/{id}/json")
    suspend fun uncollect(
        @Path("id") id: Int,
        @Path("originId") originId: Int = -1
    ): WanApiResult<PageList>


    /**
     * 获取收藏网址数据
     */
    @GET("/lg/collect/usertools/json")
    suspend fun getCollectUserTools(): WanApiResult<ArrayList<FriendBean>>

    /**
     * 收藏网址
     */
    @POST("/lg/collect/addtool/json")
    suspend fun collectAddTool(
        @Path("name") name: String,
        @Path("link") link: String
    ): WanApiResult<Any>

    /**
     * 根据关键词搜索数据
     */
    @POST("article/query/{page}/json")
    suspend fun searchArticleByKey(
        @Path("page") pageNo: Int,
        @Query("k") searchKey: String
    ): WanApiResult<PageList>


    /**
     * 获取积分排行榜
     */
    @GET("/coin/rank/{page}/json")
    suspend fun getIntegralRank(
        @Path("page") page: Int
    ): WanApiResult<ApiPagerResponse<ArrayList<IntegralBean>>>

    /**
     * 获取当前账户的个人积分
     */
    @GET("/lg/coin/userinfo/json")
    suspend fun getMyIntegral(): WanApiResult<IntegralBean>

    /**
     * 获取积分历史
     */
    @GET("lg/coin/list/{page}/json")
    suspend fun getMyIntegralHistory(
        @Path("page") page: Int = 1
    ): WanApiResult<ApiPagerResponse<ArrayList<IntegralBean>>>


}